.. _cmmCfgSetRingCntr: 

cmmCfgSetRingCntr
===================
-------------------

SYNOPSYS
`````````

.. code-block:: none

    VT_I4 cmmCfgSetRingCntr(
        [in] VT_I4 Axis, [in] VT_I4 TargCntr, [in] VT_I4 IsEnable, [in] VT_R8 CntMax
        )


DESCRIPTION
`````````````

- cmmCfgSetRingCntr 함수는 링 카운터 기능의 활성/비활성 상태 설정 및 링 카운터 범위를 설정합니다. 해당 모션 축(Axis) 의 Command 또는 Feedback 카운터를 대상으로 링 카운터를 설정합니다.


PARAMETER
`````````````

- Axis : 축(채널) 번호. 축 번호는 0 부터 시작합니다.

\

- TargCntr : 링 카운터 기능 대상 카운터를 설정합니다.

.. csv-table:: 
    :widths: 10 80
    :header-rows: 1
    :stub-columns: 0

    value, Meaning
    0 (cmCNT_COMM), Command Counter
    1 (cmCNT_FEED), Feedback Counter


- IsEnable : cmmCfgSetRingCntr 함수의 인자이며, 링 카운터 기능 활성/비활성 상태를 설정합니다.


.. csv-table:: 
    :widths: 10 80
    :header-rows: 1
    :stub-columns: 0

    value, Meaning
    0 (cmFALSE), 링 카운터 기능을 사용하지 않습니다.
    1 (cmTRUE), 링 카운터 기능을 사용합니다.


- CntMax : cmmCfgSetRingCntr 함수의 인자이며, 링 카운터 범위를 설정합니다. 링 카운터 기능이 활성화되면 지정한
  카운터는 0~CntMax 사이의 값에서만 카운트 됩니다. 지정하는 카운터 값의 단위는 “Unit distance”에 의해 정의되는
  논리적 거리 단위입니다.




RETURN VALUE
`````````````

+--------------+----------------+
| Value        | Meaning        |
+==============+================+
| 음수         | 수행 실패      |
+--------------+----------------+
| cmERR_NONE   | 수행 성공      |
+--------------+----------------+


REFERENCE
```````````

.. image:: ../../Image/4장_10.png



EXAMPLE
`````````

.. code-block:: c++
 :linenos: 
 :emphasize-lines: 5

 C/C++

 #include “Cmmsdk.h”
 #include “CmmsdkDef.h”

 long nAxisNo = 1; // 링 카운터 기능을 설정할 축을 선택합니다.

 void OnSetRingCounter ()
 {
    long nIsEnable; // 링 카운터 설정 정보.
    double fCntMax;

    /* 커맨드 카운터를 대상으로 링카운터 기능을 활성화합니다. 
    40000 펄스가 되면 커맨드 카운터가 다시 ‘0’부터 카운트 됩니다.*/
    cmmCfgSetRingCntr ( nAxisNo, // 대상 축 설정
        cmCNT_COMM, // 링 카운터 대상 카운터 설정
        cmTRUE, // 링 카운터 기능 활성/비활성 설정
        40000 // 링 카운터 범위 설정
        );

    // 해당 축의 링카운터 설정 상태를 반환합니다.
    cmmCfgGetRingCntr ( nAxis, cmCNT_COMM, &nIsEnable, &fCntMax );
 }

 void OnMove ()
 {
    /* 링 카운터 범위가 ‘0 ~ 40000’으로 설정되어 있으므로 Command Count 값이 40000 이 되면  
    자동으로 0 에서 Command Count 를 계수 합니다. */

 cmmSxVMoveStart ( nAxisNo,1 );
 }


.. code-block:: none
 :linenos:

 Visual Basic

 Dim nAxisNo As Long ‘ 링 카운터 기능을 설정할 축을 선택합니다.
 nAxisNo = 1

 Private Sub OnSetRingCounter ()

    Dim nIsEnable As Long ‘ 링 카운터 설정 정보.
    Dim fCntMax As Double

    ‘ 커맨드 카운터를 대상으로 링카운터 기능을 활성화합니다. 
    ‘ 40000 펄스가 되면 커맨드 카운터가 다시 ‘0’부터 카운트 됩니다.
    Call cmmCfgSetRingCntr ( nAxisNo, cmCNT_COMM, cmTRUE, 40000 )

    ‘ 해당 축의 링카운터 설정 상태를 반환합니다.
    Call cmmCfgGetRingCntr ( nAxis, cmCNT_COMM, nIsEnable, fCntMax )

 End Sub

 Private Sub OnMove ()

    ‘ 링 카운터 범위가 ‘0 ~ 40000’으로 설정되어 있으므로 Command Count 값이 40000 이 되면
    ‘ 자동으로 0 에서 Command Count 를 계수 합니다. 

    Call cmmSxVMoveStart ( nAxisNo ,1)

 End Sub



.. code-block:: none
 :linenos:

 Delphi

 procedure OnSetRingCounter ();
 var
    nIsEnable : LongInt; // 링 카운터 설정 정보.
    fCntMax : Double;

 begin
    { 커맨드 카운터를 대상으로 링카운터 기능을 활성화합니다. 
    40000 펄스가 되면 커맨드 카운터가 다시 ‘0’부터 카운트 됩니다. }
    cmmCfgSetRingCntr (cmX1, cmCNT_COMM, cmTRUE, 40000 );

    // 해당 축의 링카운터 설정 상태를 반환합니다.
    cmmCfgGetRingCntr (cmX1, cmCNT_COMM, @nIsEnable, @fCntMax );

 end;

 procedure OnMove ();
 begin
    { 링 카운터 범위가 ‘0 ~ 40000’으로 설정되어 있으므로 Command Count 값이 40000 이 되면
    자동으로 0 에서 Command Count 를 계수 합니다. }

    cmmSxVMoveStart (cmX1,1 );

 end;


.. seealso:: :ref:`cmmCfgGetRingCntr`